home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
pump_src
/
plasma.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-10-26
|
2KB
|
83 lines
// Image Plasma
#include "pump.h"
byte (*origin)[64000]; // Original Picture
void loadscreen(char *fname, byte *dest)
{
JCLIB_Load(fname, dest, 64000);
}
void loadpalette (char *fname)
{
JCLIB_Load(fname, GL_Pal, 768);
}
void degrade()
{
int x, y, pos;
byte *p;
p = LLS_Screen[0];
pos=320;
for (x=0; x<320; x++) {
for (y=1; y<199; y++) {
*p++ =(GL_WorkScreen[pos+320] + GL_WorkScreen[pos-320] + GL_WorkScreen[pos+1] + GL_WorkScreen[pos-1]) >> 2;
pos++;
}
}
}
void dumpscreen(int incx, int incy, byte *orig)
{
int x,y,pos,dif;
dif=incx+incy*320;
pos=0;
for (y=0;y<170; y++) {
for (x=0;x<319; x++) {
if (orig[pos]!=0)
LLS_Screen[0][pos+dif]=orig[pos];
pos++;
}
}
}
void DoPlasma(void) {
int i,j;
int f = 0;
bool leave = FALSE;
j=0;
origin = NEW(4*64000);
loadscreen("iguana.pix",origin[0]);
loadscreen("party.pix",origin[1]);
loadscreen("coding.pix",origin[2]);
loadscreen("rulez.pix",origin[3]);
loadpalette("iguana.pal");
VBL_DumpPalette(GL_Pal, 0, 256);
memset(LLS_Screen[0], 0, LLS_Size);
memcpy(GL_WorkScreen, origin[0], 64000);
while (!LLK_SpacePressed && !leave) {
for (i=0; !leave && i < 5; i++) {
if (DVTInfo != NULL && DVTInfo->semaphores[3]) {
DVTInfo->semaphores[3]--;
leave = TRUE;
} else if (DVTInfo == NULL && f > 5*70)
leave = TRUE;
degrade();
memcpy(GL_WorkScreen, LLS_Screen[0], 64000);
LLS_Update();
f += VBL_VSync(1);
}
if (j==3) j=-1;
j++;
dumpscreen(0,0,origin[j]);
memcpy(GL_WorkScreen, LLS_Screen[0], 64000);
}
DISPOSE(origin);
}